import org.junit.Test;

import static org.junit.Assert.*;

public class NGuessNumberTest {

    @Test
    public void generateAnswerTest() {
        NGuessNumber n = new NGuessNumber();
        assertEquals(4, n.generateAnswer().length);
        System.out.println("数字数量为4");
        int[] num = n.generateAnswer();
        boolean pd = true;
        boolean number = true;

        for (int i = 0; i < 4; i++) {
            if (num[i] >= 0 && num[i] <= 9) {
                number = true;
            } else {
                number = false;
            }
            for (int j = 0; j < 4; j++) {
                if (j != i) {
                    if (num[j] == num[i]) {
                        pd = false;
                    }
                }
            }
        }
        assertTrue(number);
        System.out.println("数字都在0-9之间，正确");
        assertTrue(pd);
        System.out.println("无重复数字");
    }
    @Test
    public void getPlayerInput() {

        NGuessNumber n = new NGuessNumber();

        assertEquals(4,n.getPlayerInput().length);

        System.out.println("用户输入的数字数量为4，正确");
    }
    @Test
    public void compareGuessAnswerTest() {
        int f []= NGuessNumber.getPlayerInput();
        int t []= NGuessNumber.generateAnswer();
        int A = 0;
        int B = 0;
        for (int i = 0; i < t.length; i++) {
            for (int j=0; j < t.length; j++){
                if(i!=j){
                    if(t[i]==f[j]){
                        B++;
                    }
                }else{
                    if(t[i]==f[j]){
                        A++;
                    }
                }

            }
        }
        String s = A+"A"+B+"B\n"+"A表示存在且位置正确的数字个数，B表示存在且位置不正确的数字个数！\n"+"如：1A2B,表示你猜测的四个数字有3个是对的，有一个位置对，两个位置不对。";
        assertEquals(s, NGuessNumber.compareGuessAnswer());
        System.out.println("测试比较玩家的猜测数字和答案数字后，正确!");
    }
    @Test
    public void isWin() {
        NGuessNumber n = new NGuessNumber();

        if(n.isWin()==true){
            assertEquals(true,n.isWin());
            System.out.println("根据提示信息中A的数量判断玩家是否获胜，如果获胜返回true，否则返回false，返回结果类型正确");
        }else if(n.isWin()==false){
            assertEquals(false,n.isWin());
            System.out.println("根据提示信息中A的数量判断玩家是否获胜，如果获胜返回true，否则返回false，返回结果类型正确");
        }else{
            assertEquals(true,n.isWin());
            assertEquals(false,n.isWin());
            System.out.println("根据提示信息中A的数量判断玩家是否获胜，如果获胜返回true，否则返回false，返回结果类型错误");

        }
    }

}